import { router, addRoutes } from "~/router";
import { getToken } from "~/composables/auth.js";
import { toast, showFullLoading, hideFullLoading } from "~/composables/util";
import store from "./store";

// 全局前置守卫
let hasGetInfo = false;
router.beforeEach(async (to, from, next) => {
  showFullLoading();
  // to: 我们即将要达到的路径
  // from: 我们是从哪个路径来的
  console.log(to, from);
  const token = getToken();
  if (!token && to.path != "/login") {
    toast("请先登录", "error");
    return next({ path: "/login" }); // 没有登录，去登录页
  }

  // 防止重复登录：你已经登录过了，但你还是去登录页
  if (token && to.path == "/login") {
    toast("请勿重复登录！", "error");
    // 去你来之前的页面或者去首页
    return next({ path: from.path ? from.path : "/" });
  }

  // 如果用户登录了，自动获取用户信息，并且存储在vuex当中
  let hasNewRoutes = false;
  if (token && !hasGetInfo) {
    // actions是异步的操作 所以这里使用await
    let { menus } = await store.dispatch("getInfo");
    hasGetInfo = true;
    // 动态添加路由
    hasNewRoutes = addRoutes(menus);
  }

  // 设置页面标题
  console.log(to.meta.title);
  let title = (to.meta.title ? to.meta.title : "") + "-商城后台";
  document.title = title;

  hasNewRoutes ? next(to.fullPath) : next(); // 手动指定路由 如果没有新的路由就直接next()
});

// 全局后置守卫
router.afterEach((to, from) => {
  // 关闭进度条
  hideFullLoading();
});
